/**
 * 图形验证码生成工具
 */

// 随机生成验证码字符
export function generateCaptchaText(length = 4) {
  const characters = 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz23456789';
  let result = '';
  for (let i = 0; i < length; i++) {
    result += characters.charAt(Math.floor(Math.random() * characters.length));
  }
  return result;
}

// 生成验证码图片
export function generateCaptchaImage(text, width = 120, height = 40) {
  // 创建canvas元素
  const canvas = document.createElement('canvas');
  canvas.width = width;
  canvas.height = height;
  const ctx = canvas.getContext('2d');
  
  // 填充背景色
  ctx.fillStyle = '#f0f0f0';
  ctx.fillRect(0, 0, width, height);
  
  // 绘制干扰线
  for (let i = 0; i < 3; i++) {
    ctx.strokeStyle = getRandomColor(150, 200);
    ctx.beginPath();
    ctx.moveTo(Math.random() * width, Math.random() * height);
    ctx.lineTo(Math.random() * width, Math.random() * height);
    ctx.stroke();
  }
  
  // 绘制干扰点
  for (let i = 0; i < 30; i++) {
    ctx.fillStyle = getRandomColor(150, 200);
    ctx.beginPath();
    ctx.arc(Math.random() * width, Math.random() * height, 1, 0, 2 * Math.PI);
    ctx.fill();
  }
  
  // 绘制验证码文字
  ctx.font = 'bold 24px Arial';
  ctx.textBaseline = 'middle';
  
  // 计算每个字符的位置
  const textWidth = ctx.measureText(text).width;
  const startX = (width - textWidth) / 2;
  
  for (let i = 0; i < text.length; i++) {
    const charWidth = ctx.measureText(text[i]).width;
    const x = startX + i * (textWidth / text.length);
    const y = height / 2 + Math.random() * 8 - 4;
    const angle = Math.random() * 0.4 - 0.2;
    
    // 旋转文字
    ctx.save();
    ctx.translate(x, y);
    ctx.rotate(angle);
    
    // 随机颜色
    ctx.fillStyle = getRandomColor(0, 100);
    ctx.fillText(text[i], 0, 0);
    
    ctx.restore();
  }
  
  // 返回base64图片
  return canvas.toDataURL('image/png');
}

// 生成随机颜色
function getRandomColor(min, max) {
  const r = Math.floor(Math.random() * (255 - max) + min);
  const g = Math.floor(Math.random() * (255 - max) + min);
  const b = Math.floor(Math.random() * (255 - max) + min);
  return `rgb(${r},${g},${b})`;
}

// 在UniApp环境中使用的简化版生成器
export function generateSimpleCaptcha() {
  const text = generateCaptchaText(4);
  
  // 返回验证码文本和背景色数组
  return {
    text,
    colors: Array(4).fill().map(() => getRandomColor(0, 100))
  };
}
